import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;

public class IntegerTest {
    public static void main(String[] args) {
        double a = 0.1d + 0.2d;
        System.out.println("计算: " + a);

        BigDecimal b = BigDecimal.valueOf(0.1d).add(BigDecimal.valueOf(0.2d));
        System.out.println("计算: " + b);

        boolean isEqual = b.doubleValue() == 0.3d;

        System.out.println("计算: " + b.doubleValue() + "  :  " + isEqual);

        equalsAndCo()
    }

    /**
     * HashSet、HashMap 依赖 equals() 和 hashCode()，若精度不同可能导致重复值被误存‌。
     * TreeSet、TreeMap 依赖 compareTo() 可能合并不同精度的数值‌。
     */
    private static void testEqualsAndCompareTo() {
        BigDecimal aa = new BigDecimal("0.1");
        BigDecimal bb = new BigDecimal("0.100");
        HashMap<BigDecimal, Integer> hashMap = new LinkedHashMap<BigDecimal, Integer>();
        hashMap.put(aa, 1);
        hashMap.put(bb, 1);
        System.out.println(hashMap);

        TreeMap<BigDecimal,Integer> treeMap = new TreeMap<BigDecimal,Integer>();
        treeMap.put(aa, 1);
        treeMap.put(bb, 1);
        System.out.println(treeMap);
    }
}
